package top.codedance.iotp.serialPortSDK.command;

import top.codedance.iotp.serialPortSDK.entity.seekway418x.Seekway418XInteger;
import top.codedance.iotp.serialPortSDK.enums.SeekWayBrightnessEnum;
import top.codedance.iotp.serialPortSDK.enums.SeekwayModeEnum;

/**
 * @Author 峰
 * @Date 2023/10/23
 * @Version 1.0
 */
public class Seekway418XCommand {

    public final static String HEAD = "55AA";

    /**
     * 查询模式命令
     */
    public final static String MODE = HEAD + "010000";

    /**
     * 查询速度命令
     */
    public final static String SPEED = HEAD + "020000";

    /**
     * 查询亮度命令 生成更改模式命令
     */
    public final static String BRIGHTNESS = HEAD + "030000";

    /**
     * 生成更改模式命令
     *
     * @param mode   模式表示图案模式 0x01、频谱声控模式 0x02、频谱音控模式 0x03、动感声控模式 0x04、动感音控模式 0x05
     * @param effect 当前模式下的效果序号取值 0-99
     * @param data   暂无含义
     * @return 更改模式命令
     */
    public static String changeModeCommand(SeekwayModeEnum mode, Seekway418XInteger effect, Integer data) {
        String command = HEAD + "21" + "02";
        if (null != mode) {
            command += mode.getHesStr();
        }
        command += int2Hex(effect.getNum());
        data = null == data ? 0 : data;
        command += int2Hex(data);
        if (command.length() % 14 != 0) {
            return "";
        }
        return command;
    }

    /**
     * 生成更改速度命令
     *
     * @param speed 是 0x0A，表示需要更改或当前速度档位是 10，
     *              即帧速是 100ms，每秒 10 帧。（具体速度档位和帧速关
     *              系参考说明书）
     * @return 更改速度命令
     */
    public static String changeSpeedCommand(Integer speed) {
        if (null != speed) {
            String command = HEAD + "22" + "01";
            String hex = int2Hex(speed);
            return command + hex + hex;
        }
        return "";
    }

    /**
     * 生成更改亮度命令
     *
     * @param brightness 是 0x0A，表示需要更改或当前速度档位是 10，
     *                   即帧速是 100ms，每秒 10 帧。（具体速度档位和帧速关
     *                   系参考说明书）
     * @return 更改亮度命令
     */
    public static String changeBrightnessCommand(SeekWayBrightnessEnum brightness) {
        if (null != brightness) {
            String command = HEAD + "23" + "01";
            if (null != brightness) {
                String hex = brightness.getHex();
                command += hex + hex;
                return command;
            }
        }
        return "";
    }

    public static String int2Hex(Integer num) {
        String str = "00";
        if (null != num) {
            String tmp = Integer.toHexString(num);
            if (tmp.length() == 1) {
                tmp = "0" + tmp;
            }
            str = tmp;
        }
        return str;
    }

}
